<?php
declare (strict_types = 1);

namespace app\validate;

use think\Validate;

class Check extends Validate
{
    /**
     * 定义验证规则
     * 格式：'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     */
    protected $rule = [
        'crid' => ['require'],
        'item_id' => ['require'],
        'progress' => ['require', 'in:0,1,2,3,4'],
        // 'check_btn' => ['require', 'in:1,2,3'],
    ];

    /**
     * 定义错误信息
     * 格式：'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */
    protected $message = [
        'crid.require' => '参数错误:crid',
        'item_id.require' => '请选择检查项目',
        'progress.require' => '参数错误:progress',
        'progress.in' => '进度状态错误',
        // 'check_btn.require' => '参数错误:check_btn',
        // 'check_btn.in' => '检查按钮状态错误',
    ];

    /**
     * 验证检查项目
     * @param $value
     * @param $rule
     * @param $data
     * @return bool|string
     */
    protected function checkType($value, $rule, $data)
    {
        // 获取当前进度
        $progress = $data['progress'];
        
        // 根据检查类型验证
        switch ($data['type']) {
            case 1: // 上下行检查
                switch ($progress) {
                    case 0: // 到站
                        if (empty($data['station_time'])) {
                            return '请选择到站时间';
                        }
                        break;
                    case 1: // 检查
                        if (empty($data['end_id'])) {
                            return '请选择到站车站';
                        }
                        if (empty($data['image_url'])) {
                            return '请上传图片';
                        }
                        if (empty($data['train_no'])) {
                            return '请输入车次';
                        }
                        if (empty($data['boarding_time'])) {
                            return '请选择上车时间';
                        }
                        break;
                    case 2: // 开车
                        if (empty($data['departure_time'])) {
                            return '请选择开车时间';
                        }
                        break;
                    case 3: // 到达
                        if (empty($data['arrival_time'])) {
                            return '请选择到达时间';
                        }
                        break;
                    case 4: // 完成
                        if (empty($data['complete_time'])) {
                            return '请选择完成时间';
                        }
                        break;
                }
                break;
            case 2: // 普通检查
                switch ($progress) {
                    case 0: // 到站
                        if (empty($data['station_time'])) {
                            return '请选择到站时间';
                        }
                        break;
                    case 1: // 检查
                        if (empty($data['image_url'])) {
                            return '请上传图片';
                        }
                        if (empty($data['content'])) {
                            return '请输入备注信息';
                        }
                        break;
                    case 2: // 完成
                        if (empty($data['complete_time'])) {
                            return '请选择完成时间';
                        }
                        break;
                }
                break;
        }
        return true;
    }
}
